package com.gjy.design.strategy.compression;

import java.io.File;
import java.io.IOException;

/**
 * 压缩策略接口，定义了压缩和解压缩的标准操作。
 * 所有的具体压缩算法实现都必须遵循这个契约。
 *
 * @author gjy
 * @version 1.0
 * @since 2025-11-06 14:29:17
 */
public interface CompressionStrategy {

    /**
     * 将一个或多个源文件/文件夹压缩到一个目标文件中。
     * 对于不原生支持多文件的压缩格式（如GZIP, Snappy等），
     * 实现类需要自行处理，例如抛出异常或只处理第一个源文件。
     *
     * @param source 一个或多个要被压缩的源文件或文件夹。数组不能为空。
     * @param target 压缩后生成的单个目标文件。
     * @throws IOException 如果在压缩过程中发生任何I/O错误。
     */
    void compress(File[] source, File target) throws IOException;

    /**
     * 将一个压缩文件解压缩到一个目标目录中。
     *
     * @param source 需要被解压的压缩文件。它必须是一个文件而不是目录。
     * @param target 解压内容将要存放的目标目录。如果目录不存在，它将被创建。
     * @throws IOException 如果在解压过程中发生任何I/O错误。
     */
    void decompress(File source, File target) throws IOException;

}
